Tags:
java
Hej...
Jeg er en nybegynder i Java, men prøver nu at lave noget netværkshalløj, læst i en artikel her på sitet.
Jeg kunne godt tænke mig at få returneret værdien i try{} sådan at jeg kan bruge den i min GUI.. er det mig der griber det forkert an, eller?
Min kode er her, vigtige dele af min kode er markeret således: // ********
Alt der er gennemstreget mener jeg ikke er vigtigt..
Dette er min klient:
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class EchoClient {
public void connect()
{
Socket sock=null;
try {
sock = new Socket("localhost", 10000); //Opret forbindelse til localhost:10000
} catch (UnknownHostException uhe) {
System.out.println("[client] Ukendt værtsnavn");
uhe.printStackTrace();
System.exit(1);
} catch (IOException ioe) {
System.out.println("[client] Kunne ikke oprette forbindelsen");
ioe.printStackTrace();
System.exit(1);
}
}
public String getInfo()
{
try {
Socket sock=null;
sock = new Socket("localhost", 10000); //Opret forbindelse til localhost:10000
InputStream in = sock.getInputStream(); //Stream til indkommende data
OutputStream out = sock.getOutputStream(); //Stream til udgående data
out.write("Dette er en test".getBytes());
int MAX_SIZE = 16384; //16k
byte[] buffer = new byte[MAX_SIZE];
String str = new String("");
while (true) {
int read = in.read(buffer, 0, MAX_SIZE); //læs op til MAX_SIZE tegn.
String fisse = new String(buffer, 0, read); //************
System.out.println("Modtaget: "+new String(buffer, 0, read));
/* Hop ud af while-løkken hvis vi har læst mindre end MAX_SIZE */
if (read < MAX_SIZE) {
break;
}
return fisse; //************
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Socket sock=null;
try {
sock = new Socket("localhost", 10000); //Opret forbindelse til localhost:10000
} catch (UnknownHostException uhe) {
System.out.println("[client] Ukendt værtsnavn");
uhe.printStackTrace();
System.exit(1);
} catch (IOException ioe) {
System.out.println("[client] Kunne ikke oprette forbindelsen");
ioe.printStackTrace();
System.exit(1);
}
/* Nu har vi en forbindelse til fjerncomputeren */
try {
InputStream in = sock.getInputStream(); //Stream til indkommende data
OutputStream out = sock.getOutputStream(); //Stream til udgående data
out.write("Dette er en test".getBytes());
int MAX_SIZE = 16384; //16k
byte[] buffer = new byte[MAX_SIZE];
String str = new String("");
while (true) {
int read = in.read(buffer, 0, MAX_SIZE); //læs op til MAX_SIZE tegn.
System.out.println("Modtaget: "+new String(buffer, 0, read));
/* Hop ud af while-løkken hvis vi har læst mindre end MAX_SIZE */
if (read < MAX_SIZE) {
break;
}
}
sock.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
For at være mere præcis så kræver Java compileren at hvis en metode har retur type forskellig fra void, så skal alle veje igennem metodens krop ende i en return statement der returnerer noget med den korrekte type.
I dit tilfælde kan du enten lave en finally clause på din try-catch hvor du returnerer en String, men det er sådan set også nok at indsætte en return statement i din catch eller i slutningen af metoden (formålet med finally er at sikre at en stump bliver kørt ligegyldig om der blev kastet en exception i den foregående try-catch blok eller ej). Endelig kan du også kaste en ny exception i catch, og derved undgå en return statement.
0
BTW så undskylder jeg for mit sprogbrug, jeg er bare frustreret og når jeg er frustreret, sker dette..
0
Hvis du modererer din kode, skal jeg nok læse den igen og kommentere på den.
0
Gæt:
Du kan ikke sidst i en try skrive return, uden at have en return hvis det skulle fejle, så return i catch også - ved ikke om der som i C# er en finally der afvilkes ligegodt hvad.
Ellers bare return null efter din try catch
/J